#include "thread.h"
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

/*
 *
 *   /!\  plus de segfault mais le contenu de dataForTestContext est carrément douteux
 				c'était quoi ton but ?
 				on ne passe plus l'argument en paramètre mais on fait un scanf() comme dans les autres tests
 				pour ta gouverne, les warnings permettent de débugguer ton erreur en moins de 5min :)
 				un makefile à jour ça aide aussi pas mal
 				la cible est le nom du fichier
 				tu penseras à nous remercier ;)
 *
 */
 


int nb_lines (char *fp){
	FILE *file = fopen(fp,"a+");
  	int n = 0, c;
 	while ((c = fgetc(file)) != EOF)
		if (c == '\n')
            n++;
	fclose(file);
    return n;
}

double yield_n (int k){
    time_t debut, fin;
    double duree, sum;
    int i=0;
    if(k==0)
      return 0;
    while(i<k){
      debut=time(NULL);
      thread_yield();
      fin=time(NULL);
      duree=difftime(fin,debut);
      sum+=duree;
      i++;
    }
    return sum/k;
}

void save_data (double duree, char *stats_loss){
	int n = nb_lines (stats_loss);
  	FILE * coco = fopen (stats_loss, "a+");
	fclose(coco);
	FILE * f_occ = fopen (stats_loss, "r+");
	fprintf (f_occ, "%d %f\n", n+1, duree);
  	fclose (f_occ);
	
}

void* func(void* arg){
  return arg;
}


int main(int argc,char ** argv){

  int nbIteration;
  printf("Veuillez choisir un argument pour la fonction test_cout_context :\n");
  scanf("%d",&nbIteration);
  printf("Vous avez choisi le nombre : %d\n", nbIteration);
  
  thread_t *thread=malloc(sizeof(thread_t)*(nbIteration+1));
  int *k= malloc(sizeof(int));
  *k=1;
  int *j=malloc(sizeof(int));
  int * retval=(int *)malloc(sizeof(int));
  for(*k=1;*k<nbIteration;(*k)++){
    thread_create(&thread[*k],func,k);
    thread_join(thread[*k],&k);
    save_data(yield_n(*k), "dataForTestContext.txt");   
  }
  free (j);
  free(retval);
  //}
  return EXIT_SUCCESS;
}
